package chapter10.practice14;

/**
 * 修改HorrorShow.java 用匿名类实现DangerousMonster  and  Vampire
 * 当两个类没有子类，且使用率不高的情况下可以使用匿名内部类
 * Created by yangliwei on 2017/10/21.
 */
interface Monster {
    void menace();
}

interface DangerousMonster extends Monster {
    void destroy();
}

interface Lethal {
    void kill();
}

//class DragonZilla implements DangerousMonster {
//    public void menace() {}
//    public void destroy() {}
//}

interface Vampire extends DangerousMonster, Lethal {
    void drinkBlood();
}

//class VeryBadVampire implements Vampire {
//    public void menace() {}
//    public void destroy() {}
//    public void kill() {}
//    public void drinkBlood() {}
//}

public class HorrorShow {
    static void u(Monster b) { b.menace(); }
    static void v(DangerousMonster d) {
        d.menace();
        d.destroy();
    }
    static void w(Lethal l) { l.kill(); }
    public static void main(String[] args) {
        //如果一个具体的类直接使用匿名内部类的写作方式，可以当作继承了该类
        DangerousMonster barney = new DangerousMonster(){
            public void menace() {}
            public void destroy() {}
        };
        u(barney);
        v(barney);
        Vampire vlad = new Vampire(){
            public void menace() {}
            public void destroy() {}
            public void kill() {}
            public void drinkBlood() {}
        };
        u(vlad);
        v(vlad);
        w(vlad);
    }
} ///:~

